SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[spNuevaFormula] 
@calculo varchar(500),
@condicion varchar(500),
@vigente varchar(1),
@desde varchar(10),
@hasta varchar(10),
@orden int,
@concepto int,
@op varchar(3),
@idFormula int
AS
SET NOCOUNT ON
declare @fdesde datetime
declare @fhasta datetime
declare @ordenA int

if @desde <> '-1'
	Select @fdesde = convert(datetime, @desde)
else
	Select @fdesde = null

if @hasta <> '-1'
	Select @fhasta = convert(datetime, @hasta)
else
	Select @fhasta = null

if @op = 'add'
-- Si existe uno con el mismo orden, se intercambian. Si no es correlativo con el último, le asigna el siguiente
if exists(Select * from tb_FormulasdeConcepto where concepto = @concepto and orden = @orden)
begin
	insert into tb_FormulasDeConcepto (desde, hasta, vigente, condicion, calculo, concepto, orden)
	values (@fdesde, @fhasta, @vigente, @condicion, @calculo, @concepto, @orden)
	update tb_FormulasDeConcepto set @orden = (Select max(orden) from tb_FormulasDeConcepto where concepto = @concepto) + 1
	where @concepto = concepto and @orden = orden	
end	
else
	if (Select max(orden)+1 from tb_FormulasDeConcepto where concepto = @concepto) <> @orden
	begin
		Select @ordenA = max(orden)+1 from tb_FormulasDeConcepto where concepto = @concepto
		insert into tb_FormulasDeConcepto (desde, hasta, vigente, condicion, calculo, concepto, orden)
		values(@fdesde, @fhasta, @vigente, @condicion, @calculo, @concepto, @ordenA)
	end
	else
		insert into tb_FormulasDeConcepto (desde, hasta, vigente, condicion, calculo, concepto, orden)
		values(@fdesde, @fhasta, @vigente, @condicion, @calculo, @concepto, @orden)
else
	if @op = 'upd'
	begin
		print 'Entro a update'
		update tb_FormulasDeConcepto set orden = @orden, desde = @fdesde, hasta=@fhasta, calculo = @calculo, condicion = @condicion, vigente = @vigente where idFormula = @idFormula
	end
GO
